package anneau;

import java.util.List;
import java.util.Map;
import java.util.UUID;
import javax.ejb.Remote;

import service.Fichier;


@Remote
public interface Noeud_ITF {
	public UUID getUuid();
	
    public Noeud_ITF getPrecedent();
    
    public Noeud_ITF getSuivant();
    
    public void setPrecedent(Noeud_ITF precedent);
    
    public void setSuivant(Noeud_ITF suivant);
    
    public void setListeFichiers(List<Fichier> liste_fichiers);
    
    public void setAdresseIp(String adresse_ip);
    
    public void setPort(int port);
    
	/**
	 * Message parcourant l'anneau et qui transmet la liste des Fichier disponibles.
	 * @param initiateur Le UUID du Noeud qui a emis la requete.
	 * @param map_fichiers La liste des Fichier associes aux Noeud possedant ces Fichier.
	 */
	public Map<Fichier, List<UUID>> getFichiers(UUID initiateur, Map<Fichier, List<UUID>> map_fichiers);
	
	/**
	 * Message parcourant l'anneau et qui renvoie l'adresse IP et le numéro de port du premier Noeud possedant le fichier demande.
	 * @param initiateur Le UUID du Noeud qui a emis la requete.
	 * @param md5 Le MD5 du fichier demande.
	 * @return L'adresse IP du premier Noeud possedant le fichier demande.
	 */
	public String[] getFichier(UUID initiateur, String md5);
	
	/**
	 * Appelle la méthode getFichiers pour le client.
	 * @return La liste des fichiers disponibles sur l'anneau.
	 */
	public List<Fichier> getAllFichiersClient();
	
	/**
	 * Appelle la méthode getFichier pour le client.
	 * @return L'adresse IP du premier Noeud possedant le fichier demande.
	 */
	public String[] getFichierClient(String md5);
	
	public boolean supprimerFichier(String nomFichier);
	
	public String heartBeat();
}
